package com.octopus.core.limiter;

import com.octopus.core.Request;
import lombok.NonNull;

/**
 * 默认速率限制计划器
 *
 * <p>所有目标网站采取同样的速率限制。
 *
 * @author shoulai.yang@gmail.com
 * @date 2019/07/31
 */
public class DefaultRateLimitPlanner implements RateLimitPlanner {

  /** 速率限制器 */
  private RateLimiter rateLimiter;

  /**
   * 默认速率限制计划器
   *
   * @param rateLimiter 速率限制器
   */
  public DefaultRateLimitPlanner(@NonNull RateLimiter rateLimiter) {
    this.rateLimiter = rateLimiter;
  }

  @Override
  public RateLimiter getRateLimiter(Request request) {
    return this.rateLimiter;
  }

  /** 爬虫引擎启动时会同时启动所有的速率限制器释放许可信号 */
  @Override
  public void onStart() {
    this.rateLimiter.start();
  }

  /** 爬虫引擎关闭后停止信号释放 */
  @Override
  public void onStop() {
    this.rateLimiter.stop();
  }
}
